import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import axios from 'axios'

const icode = 'B5623C9BEBAF1DAD'
// 替换baseURL
axios.defaults.baseURL = 'http://apis.imooc.com/api/'
// 设置请求时的拦截器
axios.interceptors.request.use(config => {
  // 请求时设置加载状态loading为true
  store.commit('setLoading', true)
  // 请求前错误消息的状态设置为false，因为错误消息是通过监听status属性值进行显示的
  store.commit('setError', { status: false })
  // get请求，添加到url中
  config.params = { ...config.params, icode: icode }
  // 其它请求，添加到body中
  // 如果是上传文件，添加到FormData中
  if (config.data instanceof FormData) {
    config.data.append('icode', icode)
  } else {
    // 普通的body对象，添加到data中
    config.data = { ...config.data, icode: icode }
  }
  return config
})

// 设置响应时的拦截器, 第二个回调函数为错误处理
axios.interceptors.response.use(config => {
  store.commit('setLoading', false)
  return config
}, e => {
  // 获取错误信息
  const { error } = e.response.data
  store.commit('setError', { status: true, message: error })
  // 设置loading的状态，取消加载中
  store.commit('setLoading', false)
  return Promise.reject(e)
})

const app = createApp(App)
// 使用插件
app.use(router)
app.use(store)
app.mount('#app')
